package br.com.seosoft.simplecalcfinan.bancoDados;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
import android.util.Log;
import br.com.seosoft.simplecalcfinan.R;
import br.com.seosoft.simplecalcfinan.geral;
import br.com.seosoft.simplecalcfinan.R.string;

import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.Tracker;

public class BancoDados {

	// Cria SQL tabela (SQL EM VETORES)
	private static final String[] SCRIPT_DATABASE_DELETE = new String[] {
			"DROP TABLE IF EXISTS grupos;", "DROP TABLE IF EXISTS contas;",
			"DROP TRIGGER IF EXISTS soma_contas_insert;",
			"DROP TRIGGER IF EXISTS soma_contas_delete;",
			"DROP TRIGGER IF EXISTS soma_contas_update;",
			"DROP TRIGGER IF EXISTS soma_contas_update2;",
			"DROP TRIGGER IF EXISTS soma_contas_update3;",
			"DROP TRIGGER IF EXISTS soma_contas_update4;",
			"DROP TRIGGER IF EXISTS soma_contas_limpar;" };

	private static final String[] SCRIPT_DATABASE_UPDATE = new String[] {
			"DROP TRIGGER IF EXISTS soma_contas_insert;",
			"DROP TRIGGER IF EXISTS soma_contas_delete;",
			"DROP TRIGGER IF EXISTS soma_contas_update;",
			"DROP TRIGGER IF EXISTS soma_contas_update2;",
			"DROP TRIGGER IF EXISTS soma_contas_update3;",
			"DROP TRIGGER IF EXISTS soma_contas_update4;",
			"DROP TRIGGER IF EXISTS soma_contas_limpar;" };

	private static final String[] SCRIPT_DATABASE_CREATE = new String[] {
			"CREATE TABLE IF NOT EXISTS [contas] "
					+ "	( [_id] INTEGER PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT,  "
					+ "	[fk_grupo] INTEGER NOT NULL ON CONFLICT ROLLBACK CONSTRAINT "
					+ "	[fk_grupo] REFERENCES [grupos]([_id]) ON DELETE CASCADE ON UPDATE CASCADE,  "
					+ "	[desc] CHAR(25) NOT NULL ON CONFLICT ROLLBACK,  "
					+ "	[saldo] CURRENCY(12) NOT NULL ON CONFLICT ROLLBACK, "
					+ " [data_time] TIMESTAMP DEFAULT NULL);",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_insert] "
					+ "	AFTER INSERT "
					+ "	ON [contas] "
					+ "		BEGIN "
					+ "			UPDATE grupos SET saldo_conta = (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = new.fk_grupo) WHERE _id=new.fk_grupo; "
					+ "		END;",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_delete] "
					+ "	AFTER DELETE "
					+ "	ON [contas] "
					+ "	WHEN ((SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) IS NULL) "
					+ "		BEGIN "
					+ "			UPDATE grupos SET saldo_conta = 0 WHERE _id=old.fk_grupo; "
					+ "		END;",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_update] "
					+ "AFTER UPDATE ON [contas] "
					+ "WHEN (old.fk_grupo == new.fk_grupo) "
					+ "BEGIN UPDATE grupos SET saldo_conta = (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) WHERE _id=old.fk_grupo; END",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_update2] "
					+ "AFTER UPDATE ON [contas] "
					+ "WHEN ((SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) IS NULL) "
					+ "BEGIN UPDATE grupos SET saldo_conta = 0 WHERE _id=old.fk_grupo; END",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_update3] "
					+ "AFTER UPDATE ON [contas] "
					+ "WHEN (old.fk_grupo != new.fk_grupo) "
					+ "BEGIN UPDATE grupos SET saldo_conta = (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = new.fk_grupo) WHERE _id=new.fk_grupo; END",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_update4] "
					+ "AFTER UPDATE ON [contas] "
					+ "WHEN ((old.fk_grupo != new.fk_grupo) AND ((SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) NOTNULL)) "
					+ "BEGIN UPDATE grupos SET saldo_conta = (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) WHERE _id=old.fk_grupo; END",

			"CREATE TRIGGER IF NOT EXISTS [soma_contas_limpar] "
					+ "	AFTER DELETE "
					+ "	ON [contas] "
					+ "	WHEN (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) "
					+ "		BEGIN "
					+ "			UPDATE grupos SET saldo_conta = (SELECT SUM(saldo) FROM [contas] WHERE fk_grupo = old.fk_grupo) WHERE _id=old.fk_grupo; "
					+ "		END;",

			"CREATE TABLE IF NOT EXISTS [grupos] "
					+ "	([_id] INTEGER PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT, "
					+ "	[desc] CHAR(25) NOT NULL ON CONFLICT ROLLBACK, "
					+ "	[saldo_conta] CURRENCY(12) NOT NULL ON CONFLICT ROLLBACK DEFAULT 0);"

	};// fim cria SQL tabalea

	// Cria o Banco de dados
	public Cursor c;
	private static final String NOME_BANCO = "bd_cal_finan";
	// public static int VERSAO_BANCO = 5;
	public static int VERSAO_BANCO = 5;
	protected static final String TABELA_GRUPOS = "grupos";
	protected static final String TABELA_CONTAS = "contas";
	private static SQLiteHelper dbHelper;
	public static SQLiteDatabase db;
	private static Context mContexto;
	static SharedPreferences preference;

	public BancoDados(Context context, boolean leitura) {

		Log.i(geral.LogCat, "Banco de Dados construtor");
		mContexto = context;

		if (dbHelper == null) {
			dbHelper = new SQLiteHelper(context, NOME_BANCO, VERSAO_BANCO,
					SCRIPT_DATABASE_CREATE, SCRIPT_DATABASE_UPDATE);
		}
		if (leitura) {
			db = dbHelper.getReadableDatabase();
		} else {
			db = dbHelper.getWritableDatabase();
		}
		db.execSQL("PRAGMA foreign_keys=ON;PRAGMA auto_vacuum=1");

	}// fim cria Banco de dados

	// fecha o banco
	public void fechar() {
		Log.i(geral.LogCat, "Banco de Dados.fechar()");
		// super.fechar();
		// if (dbHelper != null) {
		// dbHelper.close();
		//
		// }
		if (c != null) {
			c.close();
		}

	}// FIM

	public void setPreference(SharedPreferences preference) {
		this.preference = preference;
	}

	public Boolean setPastaSms() {
		// TODO Auto-generated method stub
		Boolean salvo = null;
		ContentValues valores = new ContentValues();

		valores.put("desc", "SMS.BANCOS");

		// INSERE NO BANCO DE DADOS
		try {
			Cursor c;
			c = db.rawQuery(
					"SELECT _id FROM grupos WHERE desc LIKE \"SMS.BANCOS\"",
					null);

			if (c.moveToFirst()) {
				return false;

			} else {
				db.insert(TABELA_GRUPOS, null, valores);
				Log.i(geral.LogCat,
						"Registro na tabela 'GRUPO' SMS gravado no banco de dados com sucesso");
				salvo = true;
				return true;
			}

		} catch (Exception e) {
			Log.e(geral.LogCat, "Erro ao gravar na tabela 'GRUPO SMS '");
			salvo = false;
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;
	}

	public int getPastaSMSId() {
		// TODO Auto-generated method stub
		Boolean salvo = null;
		ContentValues valores = new ContentValues();

		valores.put("desc", "SMS.BANCOS");

		// INSERE NO BANCO DE DADOS
		try {
			Cursor c;
			c = db.rawQuery(
					"SELECT _id FROM grupos WHERE desc LIKE \"SMS.BANCOS\"",
					null);

			if (c.moveToFirst()) {
				Log.i(geral.LogCat, "Pasta SMS.BANCOS ID = " + c.getInt(0));
				return c.getInt(0);

			} else {

				return 0;
			}

		} catch (Exception e) {
			Log.e(geral.LogCat, "Erro ao ler tabela 'GRUPO SMS '");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.

		}
		fechar();
		return 0;
	}

	// BUSCA NAS DATAS DAS CONTAS O ANO INICIAL E O ANO FINAL
	public List<String> buscarAnoInicialAnofinalContas(String id_grupo) {
		// TODO Auto-generated method stub

		List<String> datas = new ArrayList<String>();

		try {
			Log.e(geral.LogCat, "Fk_GRUPO BUSCA: " + id_grupo);

			String[] colunas = new String[] { "strftime('%Y', data_time)" };
			String WHERE = "fk_grupo=" + id_grupo;

			// c = db.query(TABELA_CONTAS, colunas, WHERE, null, null, null,
			// null,
			// "data_time DESC");
			c = db.query(TABELA_CONTAS, colunas, WHERE, null,
					"strftime('%Y', data_time)", null, "data_time DESC");

			datas.add(mContexto.getResources().getString(R.string.todos)
					.toUpperCase(Locale.getDefault()));

			while (c.moveToNext()) {

				datas.add(c.getString(0));
				Log.e(geral.LogCat, "DATA DAS CONTAS: " + c.getString(0));
			}

		} catch (Exception e) {
			// TODO: handle exception
			Log.e(geral.LogCat,
					"Erro ao executar SQL Contas: " + e.getMessage());
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return datas;

	}

	// CORRIGE AS DATAS INSERIDAS NO BD
	public void corrigirDatas() {
		// TODO Auto-generated method stub

		SharedPreferences preference = PreferenceManager
				.getDefaultSharedPreferences(mContexto);

		SharedPreferences.Editor editor;

		editor = preference.edit();

		boolean corrigirData = preference.getBoolean("corrigirData", true);

		if (corrigirData) {

			String id;
			String data;
			Date data_date = null;
			Cursor cursor;

			cursor = db.rawQuery("SELECT * FROM contas", null);

			SimpleDateFormat formatar;

			while (cursor.moveToNext()) {

				id = cursor.getString(0);
				data = cursor.getString(4);

				// Date data2 = new Date(data);

				try {

					formatar = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss",
							Locale.getDefault());

					data_date = formatar.parse(data);
					Log.i(geral.LogCat, "DATA conta 1: " + data);

				} catch (ParseException e) {
					// TODO Auto-generated catch block
					formatar = null;
					Log.e(geral.LogCat, "Erro DATA Conta 1: " + e.getMessage());

				}
				try {
					formatar = new SimpleDateFormat("yyyy-MM-dd",
							Locale.getDefault());

					data_date = formatar.parse(data);

					Log.i(geral.LogCat, "DATA conta 2: " + data);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					Log.e(geral.LogCat, "Erro DATA Conta 2: " + e.getMessage());

					formatar = null;
				}

				ContentValues valores = new ContentValues();

				formatar = new SimpleDateFormat("yyyy-MM-dd",
						Locale.getDefault());

				valores.put("data_time", formatar.format(data_date));
				// atualizar com o ID
				try {
					db.update(TABELA_CONTAS, valores, "_id=" + id, null);
					Log.i(geral.LogCat,
							"Registro ALTERADO no banco de dados 'CONTAS' com sucesso ID: "
									+ id + "DATA= "
									+ formatar.format(data_date));

				} catch (Exception e) {
					// TODO: handle exception
					Log.e(geral.LogCat,
							"Erro ao gravar no banco de dados 'CONTAS'");
					Tracker myTracker = EasyTracker.getTracker(); // Get a
																	// reference
																	// to
					// tracker.
					myTracker.sendException(e.getMessage(), false); // false
																	// indicates
					// non-fatal
					// exception.
				}

			}
			cursor.close();
			fechar();

			editor.putBoolean("corrigirData", false).commit();

		}
	}

	// DELETA TABELAS
	public void deletaBancoDados() {

		int numScripts = SCRIPT_DATABASE_DELETE.length;

		for (int i = 0; i < numScripts; i++) {
			Log.i(geral.LogCat, SCRIPT_DATABASE_DELETE[i]);
			String sql = SCRIPT_DATABASE_DELETE[i];
			Log.i(geral.LogCat, sql);
			db.execSQL(sql);

		}
	}

	// RECRIA BANCO DE DADOS
	public void recriarBancoDados() {

		int numScripts = SCRIPT_DATABASE_CREATE.length;

		for (int i = 0; i < numScripts; i++) {
			String sql = SCRIPT_DATABASE_CREATE[i];
			Log.i(geral.LogCat, sql);
			db.execSQL(sql);
		}
	}

	// BUSCA TODOS OS REGISTROS GRUPOS E CONTAS
	public void BuscaTodosRegistrosGruposContas() {
		c = db.rawQuery(
				"SELECT g.[desc] AS desc_grupo,c.[desc] AS desc_conta,c.[saldo] AS saldo_conta,c.[data_time] AS data_conta FROM  [grupos] AS g LEFT OUTER JOIN [contas] AS c ON g.[_id]=c.[fk_grupo]",
				null);
	}

	// PASSA DE 1 EM 1 OS REGISTROS GRUPOS E CONTAS
	public void ProximoRegistroContasGrupos() {
		if (c.getCount() > 0) {
			c.moveToNext();
			Log.d(geral.LogCat, "GRUPO: " + c.getString(0));
			Log.d(geral.LogCat, "CONTA: " + c.getString(1));
			Log.d(geral.LogCat, "SALDO: " + c.getString(2));
			Log.d(geral.LogCat, "DATA: " + c.getString(3));
		}
	}// FIM

	// RETORNA A QUANTIDADE DE CONTAS E GRUPOS
	public int TotalRegistroGruposContas() {
		int total = c.getCount();
		// geral.setQuantidadeGrupos(total);
		Log.d(geral.LogCat,
				"Total Registros Grupos: " + Integer.toString(c.getCount()));
		return total;
	}

	// BUSCA TODOS OS REGISTROS GRUPOS
	public void BuscaTodosRegistrosGrupos() {
		try {
			c = db.query(TABELA_GRUPOS, new String[] { "_id", "desc",
					"saldo_conta" }, null, null, null, null, null);
		} catch (Exception e) {
			// TODO: Erro ao executar SQL
			Log.e(geral.LogCat, "Erro ao executar SQL Grupos");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), true); // false indicates
			// non-fatal
			// exception.
		}
	};// FIM

	// PASSA DE 1 EM 1 OS REGISTROS GRUPOS
	public void ProximoRegistroGrupos() {
		if (c.getCount() > 0) {

			c.moveToNext();
			// geral.setIdGrupo(c.getInt(0));
			// geral.setDescGrupo(c.getString(1));
			// geral.setSaldoConta(c.getDouble(2));

			Log.d(geral.LogCat, "ID GRUPO: " + c.getString(0));
			Log.d(geral.LogCat, "DESC GRUPO: " + c.getString(1));
			Log.d(geral.LogCat, "SALDO CONTAS GRUPO: " + c.getString(2));
		}
	}// FIM

	// RETORNA A QUANTIDADE DE GRUPOS
	public int TotalRegistroGrupos() {
		int total = c.getCount();
		// geral.setQuantidadeGrupos(total);
		Log.d(geral.LogCat,
				"Total Registros Grupos: " + Integer.toString(c.getCount()));
		return total;
	}

	// INSERE NOVO GRUPO
	public Boolean GravaRegistroGrupo(String id, String desc, Double saldo_conta) {

		Boolean salvo = null;
		ContentValues valores = new ContentValues();

		valores.put("_id", id);
		valores.put("desc", desc);
		valores.put("saldo_conta", saldo_conta);

		// INSERE NO BANCO DE DADOS
		try {
			db.insert(TABELA_GRUPOS, null, valores);
			Log.i(geral.LogCat,
					"Registro na tabela 'GRUPO' gravado no banco de dados com sucesso");
			salvo = true;
		} catch (Exception e) {
			Log.e(geral.LogCat, "Erro ao gravar na tabela 'GRUPO '");
			salvo = false;
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;

	}

	public Boolean EditarRegistroGrupo(String id_grupo, String desc) {

		Boolean salvo = null;
		ContentValues valores = new ContentValues();
		valores.put("desc", desc);

		// ATUALIZAR COM ID
		try {
			db.update(TABELA_GRUPOS, valores, "_id=" + id_grupo, null);
			Log.e(geral.LogCat,
					"Registro ALTERADO GRUPO no banco de dados com sucesso ID: "
							+ id_grupo);
			salvo = true;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(geral.LogCat, "Erro EDITAR no banco de dados GRUPO");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;

	}

	// Deleta os registro dos valores
	public Boolean DeletarRegistroGrupos(String id) {

		try {
			db.delete(TABELA_GRUPOS, "_id=" + id, null);
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(geral.LogCat, "Erro ao gravar no banco de dados");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return null;

	}

	// BUSCA TODOS OS REGISTROS CONTAS
	public void BuscaTodosRegistrosContas(String id_grupo, int mes, int ano) {

		String mes_corrigido = null;

		if (mes < 10) {

			mes_corrigido = "0" + String.valueOf(mes);
		} else {
			mes_corrigido = String.valueOf(mes);
		}

		boolean ordenar = true;

		try {
			preference = PreferenceManager
					.getDefaultSharedPreferences(mContexto);

			ordenar = preference.getBoolean(geral.ORDENAR_SQL_DATA, true);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {

			try {
				Log.e(geral.LogCat, "BUSCA REgistro Contas: " + id_grupo
						+ " mes " + mes + " ano " + ano);

				String[] colunas = new String[] { "_id", "fk_grupo", "desc",
						"saldo", "data_time" };
				String WHERE = "fk_grupo=" + id_grupo;
				String WHERE_ANO = WHERE + " AND strftime('%Y', data_time)='"
						+ ano + "'";
				String WHERE_MES = WHERE + " AND strftime('%m', data_time)='"
						+ mes_corrigido + "'";
				String WHERE_ANO_MES = WHERE
						+ " AND strftime('%Y-%m', data_time)='" + ano + "-"
						+ mes_corrigido + "'";

				String ORDER_ASC = "data_time ASC";
				String ORDER_DESC = "data_time DESC";

				// String SQL =
				// "SELECT _id,fk_grupo,desc,saldo,data_time FROM [contas] WHERE "
				// + WHERE + " ORDER BY [data_time] ASC";

				if (mes == 0 && ano == 0) {
					// nao passou o mes e ano
					c = db.query(TABELA_CONTAS, colunas, WHERE, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);

				}

				if (mes > 0 && ano > 0) {
					// Passou o mes e ano
					c = db.query(TABELA_CONTAS, colunas, WHERE_ANO_MES, null,
							null, null, ordenar ? ORDER_ASC : ORDER_DESC);
					Log.e(geral.LogCat, "mes>0 ano > 0: " + WHERE_ANO_MES);
				}
				if (mes > 0 && ano == 0) {
					// Passou o mes
					c = db.query(TABELA_CONTAS, colunas, WHERE_MES, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);

					Log.e(geral.LogCat, "mes> ano = 0: " + WHERE_MES);
				}

				if (mes == 0 && ano > 0) {
					// Passou o ano
					c = db.query(TABELA_CONTAS, colunas, WHERE_ANO, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);
				}
				// c = db.rawQuery(SQL, null);

			} catch (Exception e) {
				// TODO: handle exception
				Log.e(geral.LogCat,
						"Erro ao executar SQL Contas: " + e.getMessage());
				Tracker myTracker = EasyTracker.getTracker(); // Get a reference
																// to
				// tracker.
				myTracker.sendException(e.getMessage(), false); // false
																// indicates
				// non-fatal
				// exception.
			}

		}

	}// FIM

	// get todas as contas por mes passado por parametro
	public void getContasMes() {
		// TODO Auto-generated method stub

	}// FIM

	// BUSCA TODOS OS REGISTROS CONTAS ORDENAR VALOR
	public void BuscaTodosRegistrosContasOrderValor(String id_grupo, int mes,
			int ano, boolean odernacaoAsc) {

		String mes_corrigido = null;

		if (mes < 10) {

			mes_corrigido = "0" + String.valueOf(mes);
		} else {
			mes_corrigido = String.valueOf(mes);
		}

		boolean ordenar = odernacaoAsc;

		try {
			preference = PreferenceManager
					.getDefaultSharedPreferences(mContexto);

			ordenar = preference.getBoolean(geral.ORDENAR_SQL_VALOR, true);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			try {
				Log.e(geral.LogCat, "Fk_GRUPO BUSCA: " + id_grupo);

				String[] colunas = new String[] { "_id", "fk_grupo", "desc",
						"saldo", "data_time" };
				String WHERE = "fk_grupo=" + id_grupo;

				String ORDER_ASC = "saldo DESC";
				String ORDER_DESC = "saldo ASC";

				Log.e(geral.LogCat, "BUSCA REgistro Contas: " + id_grupo
						+ " mes " + mes + " ano " + ano);

				String WHERE_ANO = WHERE + " AND strftime('%Y', data_time)='"
						+ ano + "'";
				String WHERE_MES = WHERE + " AND strftime('%m', data_time)='"
						+ mes_corrigido + "'";
				String WHERE_ANO_MES = WHERE
						+ " AND strftime('%Y-%m', data_time)='" + ano + "-"
						+ mes_corrigido + "'";

				// String SQL =
				// "SELECT _id,fk_grupo,desc,saldo,data_time FROM [contas] WHERE "
				// + WHERE + " ORDER BY [data_time] ASC";

				if (mes == 0 && ano == 0) {
					// nao passou o mes e ano
					c = db.query(TABELA_CONTAS, colunas, WHERE, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);

				}

				if (mes > 0 && ano > 0) {
					// Passou o mes e ano
					c = db.query(TABELA_CONTAS, colunas, WHERE_ANO_MES, null,
							null, null, ordenar ? ORDER_ASC : ORDER_DESC);
					Log.e(geral.LogCat, "mes>0 ano > 0: " + WHERE_ANO_MES);
				}
				if (mes > 0 && ano == 0) {
					// Passou o mes
					c = db.query(TABELA_CONTAS, colunas, WHERE_MES, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);

					Log.e(geral.LogCat, "mes> ano = 0: " + WHERE_MES);
				}

				if (mes == 0 && ano > 0) {
					// Passou o ano
					c = db.query(TABELA_CONTAS, colunas, WHERE_ANO, null, null,
							null, ordenar ? ORDER_ASC : ORDER_DESC);
				}

			} catch (Exception e) {
				// TODO: handle exception
				Log.e(geral.LogCat,
						"Erro ao executar SQL Contas: " + e.getMessage());
				Tracker myTracker = EasyTracker.getTracker(); // Get a reference
																// to
				// tracker.
				myTracker.sendException(e.getMessage(), false); // false
																// indicates
				// non-fatal
				// exception.
			}
		}

	}// FIM

	// PASSA DE 1 EM 1 OS REGISTROS CONTAS
	public void ProximoRegistroContas() {
		if (c.getCount() > 0) {

			c.moveToNext();
			Log.d(geral.LogCat, "ID_CONTA: " + c.getString(0));
			Log.d(geral.LogCat, "Fk_GRUPO: " + c.getString(1));
			Log.d(geral.LogCat, "DESC_CONTA: " + c.getString(2));
			Log.d(geral.LogCat, "SALDO_CONTA: " + c.getString(3));
			Log.d(geral.LogCat, "DATA: " + c.getString(4));
		}
	}// FIM

	// RETORNA A QUANTIDADE DE CONTAS
	public int TotalRegistroContas() {
		int total = c.getCount();
		Log.d(geral.LogCat,
				"Total Registros Contas: " + Integer.toString(c.getCount()));
		return total;
	}

	// Grava registros na tabela CONTAS
	public Boolean GravaRegistroContas(String fk_grupo, String desc,
			String saldo, String data) {

		Boolean salvo = null;
		ContentValues valores = new ContentValues();
		valores.put("fk_grupo", fk_grupo);
		valores.put("desc", desc);
		valores.put("saldo", saldo);
		valores.put("data_time", data);

		// insere no banco
		try {
			db.insert(TABELA_CONTAS, null, valores);
			Log.i(geral.LogCat,
					"Registro gravado no banco de dados com sucesso 'CONTAS'");
			salvo = true;
		} catch (Exception e) {
			Log.e(geral.LogCat, "Erro ao gravar no banco de dados 'CONTAS'");
			salvo = false;
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;

	}// fim registros na tabela CONTAS

	// Deleta os registro dos Contas
	public Boolean DeletarRegistroContas(String id) {

		Boolean salvo = null;

		try {
			db.delete(TABELA_CONTAS, "_id=" + id, null);
			Log.v(geral.LogCat, "CONTA: " + id + " Deletada");
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(geral.LogCat, "Erro ao gravar no banco de dados 'CONTAS'");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;

	}// fim Deleta Registros na tabela CONTAS

	// edita Conta
	public Boolean EditarRegistroContas(String id, String fk_grupo,
			String desc, String saldo, String data) {

		Boolean salvo = null;
		ContentValues valores = new ContentValues();
		valores.put("desc", desc);
		valores.put("saldo", saldo);
		valores.put("fk_grupo", fk_grupo);
		valores.put("data_time", data);
		// atualizar com o ID
		try {
			db.update(TABELA_CONTAS, valores, "_id=" + id, null);
			Log.i(geral.LogCat,
					"Registro ALTERADO no banco de dados 'CONTAS' com sucesso ID: "
							+ id);
			salvo = true;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(geral.LogCat, "Erro ao gravar no banco de dados 'CONTAS'");
			Tracker myTracker = EasyTracker.getTracker(); // Get a reference to
			// tracker.
			myTracker.sendException(e.getMessage(), false); // false indicates
			// non-fatal
			// exception.
		}
		fechar();
		return salvo;

	}

}
